7.05. Брокеры сообщений
Брокеры сообщений
Брокер сообщений — это программное обеспечение или система, которая управляет обменом данными между приложениями, сервисами или системами. Брокер выступает в роли посредника, который принимает сообщения от «производителей» (producers) и передаёт их «потребителям» (consumers). Это позволяет организовать асинхронную связь между компонентами системы.
Производитель отправляет сообщение в брокер и продолжает свою работу, не дожидаясь ответа от потребителя, а брокер гарантирует доставку сообщений даже в случае сбоев (например, через очереди и подтверждения) и позволяет распределять нагрузку между несколькими потребителями, что упрощает масштабирование.
Среди брокеров различают RabbitMQ (модель очередей), Apache Kafka (модель топиков), ActiveMQ (классический брокер сообщений с поддержкой JMS), IBM MQ и Redis (который также используется для кэширования).
Мы рассмотрим RabbitMQ и Kafka по отдельности. Для начала давайте разграничим
| Критерий | RabbitMQ | Kafka |
|---|---|---|
| Архитектура | Основана на очередях (queues) | Основана на топиках (topics) с партициями (partitions) |
| Модель работы | Производитель → Обменник (Exchange) → Очередь → Потребитель | Производитель → Топик → Партиция → Потребитель |
| Упорядоченность | Гарантируется порядок в пределах одной очереди | Гарантируется порядок только внутри одной партиции |
| Состояние данных | Сообщения хранятся до доставки или истечения времени хранения | Сообщения хранятся на диске в течение заданного времени (например, 7 дней) |
| Производительность | До десятков тысяч сообщений в секунду | До миллионов сообщений в секунду |
| Задержки | Низкие задержки благодаря прямой передаче через очереди | Задержки выше из-за партиционирования и логической структуры |
| Ресурсы | Требует меньше ресурсов для небольших нагрузок | Требует больше памяти и дискового пространства |
| Масштабируемость | Масштабируется за счёт добавления брокеров, но кластеризация сложнее в настройке | Легко масштабируется за счёт добавления брокеров и партиций |
| Гарантия доставки | Гарантированная доставка каждого сообщения | Доставка "хотя бы один раз" (at-least-once delivery) |
| Маршрутизация | Поддерживает сложные правила маршрутизации через обменники (exchanges) | Маршрутизация ограничена топиками и партициями |
| Веб-интерфейс | Встроенный веб-интерфейс (RabbitMQ Management) | Отсутствует встроенное решение; используются сторонние инструменты |
| Сценарии использования | Фоновые задачи, микросервисы, системы уведомлений | Потоковая аналитика, логирование, мониторинг, IoT |
| Примеры задач | Отправка email, обработка заказов, рассылка уведомлений | Сбор и анализ логов, мониторинг событий, обработка данных в реальном времени |